Github
Postselectroncontext isolation

context isolation

A set of two-state buttons that can be toggled on or off

context isolation은 preload script와 electron 내부 로직이 분리된 컨텍스트에서 실행되는것을 보장한다.

보안 목적으로 electron 내부 코드와 api가 preload script에 접근하는 것을 예방한다.

context isolation이 되기 전

1// preload.js 2window.myAPI = { 3 doAThing: () => {} 4} 5--- 6// renderer.js 7window.myAPI.doAThing()

window 객체에 바로 넣기 때문에 위험하다.

context isolation 적용 후

1// preload.js 2const { contextBridge } = require('electron') 3 4contextBridge.exposeInMainWorld('myAPI', { 5 doAThing: () => {} 6}) 7--- 8// renderer.js 9window.myAPI.doAThing()

contextBridge를 통해서 안전하게 전달한다.

api를 구현할 때, 주의할 점으로 ipc와 같은 api를 그대로 노출하는 것은 사용하기에 위험하다. 예를 들어,

1contextBridge.exposeInMainWorld('myAPI', { 2 send: ipcRenderer.send 3})

위 코드와 같이 사용한다면 사용처에서 ipc의 send를 필터링 없이 사용가능하게 된다. 따라서 아래와 같이 특정한 이벤트네임으로 동작을 정한다.

1contextBridge.exposeInMainWorld('myAPI', { 2 loadPreferences: () => ipcRenderer.invoke('load-prefs') 3})
PreviousIPC